package org.eda.actividad3;

public class Candidato 
{
	private String nombre;
	private String apellido;
	private Partido partido;
	private ListaCandidatos listaAmigos;
	private ListaDistritos listaDistritos;
	
	public Candidato(String pApellido, String pNombre)
	{
		this.nombre = pNombre;
		this.apellido = pApellido;
		this.partido = new Partido(null);
		this.listaAmigos = new ListaCandidatos();
		this.listaDistritos = new ListaDistritos();
	}
	
	public String getNombre() 
	{
		return this.nombre;
	}

	public String getApellido() 
	{
		return this.apellido;
	}
	
	public Partido getPartido()
	{
		return this.partido;
	}
	
	public ListaCandidatos getListaAmigos()
	{
		return this.listaAmigos;
	}
	
	public ListaDistritos getListaDistritos()
	{
		return this.listaDistritos;
	}
	
	public Candidato buscarCandidato(Candidato pCandidato)
	{
		return this.getListaAmigos().buscarCandidato(pCandidato.getApellido(), pCandidato.getNombre());
	}
	
	public void anadirCandidato(Candidato pCandidato)
	{
		Candidato cand = this.getListaAmigos().buscarCandidato(pCandidato.getApellido(), pCandidato.getNombre());
		if(cand == null)
		{
			this.getListaAmigos().anadirCandidato(pCandidato);
		}
	}
	
	public void eliminarCandidato(Candidato pCandidato)
	{
		Candidato cand = this.getListaAmigos().buscarCandidato(pCandidato.getApellido(), pCandidato.getNombre());
		if(cand != null)
		{
			this.getListaAmigos().eliminarCandidato(pCandidato);
		}
	}
	
	public Distrito buscarDistrito(Distrito pDistrito)
	{
		return this.getListaDistritos().buscarDistrito(pDistrito.getIdDistrito());
	}
	
	public void anadirDistrito(Distrito pDistrito)
	{
		Distrito dist = this.getListaDistritos().buscarDistrito(pDistrito.getIdDistrito());
		if(dist == null)
		{
			this.getListaDistritos().anadirDistrito(pDistrito);
		}
	}
	
	public void eliminarDistrito(Distrito pDistrito)
    {
		Distrito dist = this.getListaDistritos().buscarDistrito(pDistrito.getIdDistrito());
		if(dist != null)
		{
			this.getListaDistritos().eliminarDistrito(pDistrito);
		}
    }
	
	public int hashCode() {
		final int prime = 31;
		int result = 1;
		result = prime * result
				+ ((apellido == null) ? 0 : apellido.hashCode());
		result = prime * result + ((nombre == null) ? 0 : nombre.hashCode());
		return result;
	}

	public boolean equals(Object obj) {
		if (this == obj)
			return true;
		if (obj == null)
			return false;
		if (getClass() != obj.getClass())
			return false;
		Candidato other = (Candidato) obj;
		if (apellido == null) {
			if (other.apellido != null)
				return false;
		} else if (!apellido.equals(other.apellido))
			return false;
		if (nombre == null) {
			if (other.nombre != null)
				return false;
		} else if (!nombre.equals(other.nombre))
			return false;
		return true;
	}

	public int compareTo(Candidato pCandidato) 
	{
		Comparable<Candidato> comp = (Comparable<Candidato>) pCandidato;
		if(this.getApellido() == pCandidato.getApellido() && this.getNombre() == pCandidato.getNombre())
		{
			return 0;
		}
		else
		{
			if(comp.compareTo(this) == 1)
			{
				return -1;
			}
			else
			{
				return 1;
			}		
		}
	}
}